#ifndef _OCPP_VolumeAlgorithm_H__
#define _OCPP_VolumeAlgorithm_H__

#include "VolumeGridData.h"
#include "OCMain/OCMath.h"

namespace OCPP
{
	namespace Volume
	{
		class VolumeAlgorithm
		{
		public:
			VolumeAlgorithm() {}
			virtual ~VolumeAlgorithm() {}
			virtual VolumeGridData onCompute(const NcGridDataList& gridDataList, const VolumeOptions& options) = 0;
		};

		class _volumeExport NcAlgorithmUV : public VolumeAlgorithm
		{
		public:
			NcAlgorithmUV() {}
			virtual ~NcAlgorithmUV() {}
			virtual VolumeGridData onCompute(const NcGridDataList& gridDataList, const VolumeOptions& options);
		};

		class _volumeExport NcAlgorithmNone : public VolumeAlgorithm
		{
		public:
			NcAlgorithmNone() {}
			virtual ~NcAlgorithmNone() {}
			virtual VolumeGridData onCompute(const NcGridDataList& gridDataList, const VolumeOptions& options);
		};

		class _volumeExport NcAlgorithmVecLength : public VolumeAlgorithm
		{
		public:
			NcAlgorithmVecLength() {}
			virtual ~NcAlgorithmVecLength() {}
			virtual VolumeGridData onCompute(const NcGridDataList& gridDataList, const VolumeOptions& options);
		};

		class _volumeExport NcAlgorithmCR : public VolumeAlgorithm
		{
		public:
			NcAlgorithmCR() {}
			virtual ~NcAlgorithmCR() {}
			virtual VolumeGridData onCompute(const NcGridDataList& gridDataList, const VolumeOptions& options);
		};
	}
}


#endif // !_OCPP_NcOptions_H__
